﻿using System;
using NHibernate;
using NHibernate.Cfg;

namespace ClickLand.CorporacionPlaza.AccesoDato.Implementacion.NHibernateMySql
{
    /// <summary> Clase que configura la session del nhibernate </summary>
    public class NHibernateHelper
    {
        #region Atributos

        /// <summary> Objeto que posee la definicion para el log </summary>
        private static log4net.ILog _log;

        
        /// <summary>Objeto que posee la definicion de la session del NHibernate </summary>
        private static readonly ISessionFactory SessionFactory;

        #endregion

        #region Metodos

        /// <summary> Constructor estático en donde se inicializa la sesion de NHibernate </summary>
        static NHibernateHelper()
        {
            log4net.Config.BasicConfigurator.Configure();
            _log = log4net.LogManager.GetLogger(typeof(NHibernateHelper));

            try
            {
                Configuration cfg = new Configuration();
                SessionFactory = cfg.Configure().BuildSessionFactory();
            }
            catch (Exception e)
            {
                _log.Error(e.Message);
                _log.Error(e.InnerException.Message);
            }
        }


        /// <summary> Metodo estático para solicitar la sesion de NHibernate </summary>
        /// <returns>retorna la sesion abierta</returns>
        public static ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }


        /// <summary> Metodo que retorna la sesion abierta </summary>
        /// <returns>la sesion</returns>
        public static ISession GetCurrentSession()
        {
            return SessionFactory.GetCurrentSession();
        }

        #endregion

    }
}
